<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Funciones de inteligencia articifial
 * (Requiere coleccion de Funciones de String, string_my_helper)
 * 
 * deepsteal@hotmail.com
 */
// ------------------------------------------------------------------------

/**
 * Ia_capture
 * Segura Edgardo
 * Retorna cadena recortada si se encuentra cadena EXIST en un la cadena y el esta es mas larga que LARGO_CONTROL
 *
 * @access	public
 * @param	string, int, string, string, string
 * @return	string
 */	
if ( ! function_exists('ia_capture'))
{
	function ia_capture($string,$largo_maximo=100000,$since,$until,$existe){
			
		if(strlen($string)<=$largo_control)
		{
			if(substr_exist($string,$existe))
			{
				$result=since_until($string,$since,$until);
			}
		}	
		return $result;
	}
}
// ------------------------------------------------------------------------

/**
 * Quizas_quiso_decir
 * Segura Edgardo
 * Retorna palabra sugerida segun array de palabras polulares.
 *
 * @access	public
 * @param	string, array
 * @return	string
 */	
if ( ! function_exists('quizas_quiso_decir'))
{
	function quizas_quiso_decir($buscando,$array_top){
		$array_top = array_unique(array_merge($array_top['busquedas'],$array_top['es'],$array_top['en']));
		foreach($array_top as $actual){
			$similar = es_similar($buscando,$actual);
			if($similar['valido']==true){
				$coincidencias[] = $similar;
			}
		}		
	
		$val = 0;
		$quizo_decir =''; 
		
		if(!is_array($coincidencias)){
			return '';
		}
		foreach($coincidencias as $actual){
			if($actual['puntuacion']>$val){
				$quizo_decir = $actual['palabra'];
				$val = $actual['puntuacion'];
			}
		}
		
		$puesto_buscado = array_search($buscando,$array_top);
		$puesto_recomendacion = array_search($quizo_decir,$array_top);
		
		if($puesto_buscado<$puesto_recomendacion or $val<60 or $quizo_decir.'s'==$buscando){
			$quizo_decir='';
		}else{
			$quizo_decir = $quizo_decir;
		}
			
		return $quizo_decir;
	}
}
// ------------------------------------------------------------------------

/**
 * Mix_palabras
 *
 * Retorna array de palabras encontradas en arrays o strings.
 *
 * @access	public
 * @param	string | array
 * @return	array
 */	
if ( ! function_exists('mix_palabras'))
{
	function mix_palabras($string1,$string2){
		if(gettype($obj1)!='array')
		{
			$obj1  = solo_palabras($obj1);
		}	
		if(gettype($obj2)!='array')
		{		
			$obj2  = solo_palabras($obj2);
		}	
		return array_unique(array_merge($obj1,$obj2));
	}
}
// ------------------------------------------------------------------------

/**
 * Solo_palabras
 *
 * Retorna array de palabras encontradas en un string.
 *
 * @access	public
 * @param	string
 * @return	array
 */	
if ( ! function_exists('solo_palabras'))
{
	function solo_palabras($string){	
		preg_match_all("([a-z|0-9|/_|/.]+)", $string, $string);			
		$resultado = explode('.',str_replace(array('.',',',';',' '),'.',' '.implode(' ',$string[0])));	
		$resultado = array_unique($resultado);	
		unset($resultado[array_search('',$resultado)]);	
		
		foreach($resultado as $actual){
			if(strlen($actual)>1){
				$resultado_final[] = $actual;
			}
		}	
		return $resultado_final;
	}
}
// ------------------------------------------------------------------------

/**
 * No_claves
 *
 * Resta array con array de palabras no claves.
 *
 * @access	public
 * @param	array
 * @return	array
 */	
if ( ! function_exists('no_claves'))
{
	function no_claves($obj){	
		$no_claves = array('la','de','el','sea','yo','una','da','del','es','no','si','se','en','mas','menos','sera','que','las','lo','con','puede','les','www','debe','contra','rebajar','nada','ahi','dado','esta','estar','tener','decir','hay');				
		return restar_arrays($obj,$no_claves);
	}
}
// ------------------------------------------------------------------------

/**
 * Es_similar
 *
 * Valoracion de similitud en palabras.
 *
 * @access	public
 * @param	string | string
 * @return	array
 */	
if ( ! function_exists('es_similar'))
{
	function es_similar($buscando,$comparado){
		$comparacion = abs(strcasecmp($buscando,$comparado));
		$largo_de_buscando = strlen($buscando);
		$largo_de_comparado = strlen($comparado);
		
		$letras_diferencia = abs( $largo_de_buscando - $largo_de_comparado );
	
		$puntuacion = matching_letras($buscando,$comparado);
		
		if($comparacion < 19 and $comparado!='' and $letras_diferencia < 5 and encuentra_parte($buscando,$comparado) and $puntuacion!=100){
							
			$resultado['valido'] = true;
			$resultado['puntuacion'] = $puntuacion;
			$resultado['palabra'] = $comparado;
		}else{
			$resultado['valido'] = false;
		}
		return $resultado;
	}
}
// ------------------------------------------------------------------------

/**
 * Matching_letras
 *
 * Matching letra a letra, de dos palabras.
 *
 * @access	public
 * @param	string | string
 * @return	int
 */	
if ( ! function_exists('matching_letras'))
{
	function matching_letras($string1,$string2){
		$largo_de_string1 = strlen($string1);
		$largo_de_string2 = strlen($string2);
		
		if($largo_de_string1>$largo_de_string2){
			$top = $largo_de_string1;
			for($i=0;$i<$largo_de_string2;$i++){			
				if($string2[$i]===$string1[$i]){
					$count++;
				}			
			}
		}else{
			$top = $largo_de_string2;
			for($i=0;$i<$largo_de_string1;$i++){				
					if($string1[$i]===$string2[$i]){
						$count++;
					}			
				}	
		}
		
		return (($count/$top)*100);
	}
}
// ------------------------------------------------------------------------

/**
 * Encuentra_parte
 *
 * Encuentra porciones de una palabras que hacen creer que es similar
 *
 * @access	public
 * @param	string
 * @return	string
 */	
if ( ! function_exists('encuentra_parte'))
{
	function encuentra_parte($buscando,$comparado){
		$largo_de_buscando = strlen($buscando);
		$largo_de_comparado = strlen($comparado);
		
		$buscando_primeras2 = $buscando[0].$buscando[1];
		$buscando_ultimas2 =  $buscando[$largo_de_buscando-2].$buscando[$largo_de_buscando-1];
	
		$comparado_primeras2 = $comparado[0].$comparado[1];
		$comparado_ultimas2 =  $comparado[$largo_de_comparado-2].$comparado[$largo_de_comparado-1];
	
		if(substr_exist($buscando,$comparado) or substr_exist($buscando,$comparado) or substr_exist($comparado,$buscando_primeras2) or substr_exist($comparado,$buscando_ultimas2) or substr_exist($buscando,$comparado_primeras2) or substr_exist($buscando,$comparado_ultimas2)){
			return true;
		}else{
			return false;
		}
	}
}
// ------------------------------------------------------------------------

/* End of file ia_my_helper.php */
/* Location: ./system/application/helpers/ia_my_helper.php */